﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace TinyPMS_Jerusalem.Models.Interface
{
    interface IRepository<T> where T : class
    {
        /// <summary>
        /// 添加对应类型T的实例
        /// </summary>
        /// <param name="instance">T的实例</param>
        void Add(T instance);

        /// <summary>
        /// 删除对应类型T的实例
        /// </summary>
        /// <param name="instance">实例</param>
        void Delete(T instance);

        /// <summary>
        /// 保存所做的更改到数据库
        /// </summary>
        void Save();

        /// <summary>
        /// 获取类型T中公共属性“ID”为指定值的实例
        /// </summary>
        /// <param name="ID">指定的ID值</param>
        /// <returns>返回对应的实例，返回null则表示没有找到对应的实例</returns>
        T GetElementByID(string ID);

        /// <summary>
        /// 返回所有满足constrain约束条件的T的实例
        /// </summary>
        /// <param name="constrain">约束条件</param>
        /// <returns>T的实例的集合</returns>
        IEnumerable<T> GetAll(Func<T, bool> constrain);

        /// <summary>
        /// 返回所有的T的实例
        /// </summary>
        /// <returns>T的实例的集合</returns>
        IQueryable<T> GetAll();

        /// <summary>
        /// 判断类型T中公共属性“ID”为指定值的实例是否存在
        /// </summary>
        /// <param name="ID">指定的ID值</param>
        /// <returns>如果存在返回True，不存在返回False</returns>
        bool IsExist(string ID);
    }
}